Creazione di una nuova tabella.

Finora ci siamo limitati ad utilizzare un database soltanto per crearlo, cancellarlo o visualizzare la lista delle tabelle che lo compongono e senza alcun dubbio non ne abbiamo sfruttato le potenzialità.
In questa nuova lezione vedremo come strutturare una nuova tabella, comprenderne le insidie di alcuni tipi di dato e comprendere l'importanza dei campi unici, anche se alcuni di voi lo sapranno se hanno dimestichezza con Access.
Creare una tabella è un operazione abbastanza semplice, mentre la strutturazione dei campi richiede un po’ più  di concentrazione; infatti la creazione di una semplice tabella deve essere sempre preceduta dalla chiarezza mentale nel dare il giusto numero di campi da inserirvi ed il tipo di ciascuno di essi.
Naturalmente avremo sempre un esempio a portata di mano che ci aiuterà a comprendere meglio i singoli passi che ci porteranno alla creazione della nostra tabella. Nella fattispecie l'esempio tratterà un archivio musicale.
Naturalmente dobbiamo pensare ai campi che comporranno questa tabella, che una volta creata ognuno di voi potrà personalizzare a suo piacimento, denominata musica ed essi potrebbero essere:

Nome del campo

Descrizione

id

Numero di identificazione univoco del record.

titolo

Titolo dell'album, della raccolta o della compilation.

artista

Nome dell'artista o degli artisti vari (AA.VV.).

etichetta

Il nome della casa discografica che lo produce.

formato

CD, cassetta o, magari, vinile.

data

La data di acquisto del CD.

note

Eventuali note personali all'album o all'artista.

I campi sopraelencati nella tabella sono destinati a contenere un tipo di dato che definisce le caratteristiche dell'informazione che può esservi memorizzata. Per alcuni campi può essere definita la lunghezza massima prevista dal campo, per altri no. E' molto importante definire i campi in modo appropriato, per esempio se definiamo un campo di tipo varchar di 50 caratteri e noi nel suo campo inseriamo una stringa da 100 essa verrà troncata al 50° carattere. Inoltre bisognerà prestare molta attenzione nella sintassi SQL in quanto una sua compilazione non corretta porterebbe a non creare la tabella. qui sotto riportiamo alcuni dei tipi di dato più utilizzati:

Tipi di dato

Descrizione

Definizione lunghezza

INT

Un intero, di dimensioni normali compreso tra 0 e 4294967295.

Non obbligatoria, per default 11

FLOAT

Un numero a virgola mobile (es. un valore monetario).

Non obbligatorio, per default 10,2 dove 2 è il numero dei decimali

DATE

Una data nel formato AAAA-MM-GG.

No.

CHAR

Una stringa della lunghezza fissa tra 1 e 255 caratteri.

Non obbligatoria, per default 1.

VARCHAR

Una stringa di lunghezza variabile tra 1 e 255 caratteri.

 Si.

TEXT

Un campo con lunghezza massima 65535 caratteri.

No.

 Dalla prima tabella ci rendiamo conto dell'utilità dei campi univoci (ID) per ogni record; essi ci aiuteranno a tener traccia dei dati immessi e sarà utile anche nella relazione tra più tabelle.
Come detto nella tabella musica abbiamo inserito il campo univoco ID, anziché il campo titolo in quanto, come molti sanno, il titolo di un CD può essere uguale anche se l'artista è differente, quindi il tutto corrisponda a due lavori diversi.

Scrivere una sequenza di due moduli per creare una tabella di un database può sembrare un operazione ostica in quanto finora per creare una tabella d'esempio avevamo utilizzato (vedi installazione di MySQL) una semplice riga di comando in DOS del tipo:

create table tabella_test (id int, note text);

se utilizziamo uno script in PHP per inviare la stessa interrogazione a MySQL, e creare quindi la stessa tabella, non facciamo altro che rendere più attraente il procedimento con un'interfaccia di interrogazione detta anche interfaccia amministrativa.
Per creare questa interfaccia cominceremo definendo un modulo HTML, per passare poi a creare lo script PHP che recuperi i dati dal modulo e crei dinamicamente un secondo modulo. Infine creeremo uno script che invii realmente la stringa di interrogazione SQL.
Dividiamo il lavoro in fasi:

Fase 1: il numero dei campi.

Apriamo il nostro buon vecchio Blocco Note e digitiamo il seguente codice HTML e salviamolo con il nome di creatabella.htm:

<html><head><title>Creazione di una tabella in un database: fase 1</title></head>
<body>
  <h1>Fase 1: Nome della tabella e numero dei campi</h1>
  <form method="post" action ="defcampi.php">
  <p><b>Nome della tabella:</b><br>
  <input type="text" name="tabella" size=25>
  <p><b>Numero dei campi:</b><br>
  <input type="text" name="campi" size=5>
  <p><input type="submit" name="invio" value="Vai alla fase 2">
 </form>
 </body>
 </html>

In questa fase abbiamo creato il nome e il numero di campi necessari alla creazione della nostra tabella; adesso, nella fase 2, dobbiamo definire in maniera approfondita il nome, il tipo e la lunghezza dei campi.

Apriamo come sempre il nostro Blocco Note, digitiamo il seguente codice e salviamolo con il nome di defcampi.php:

<?
   if ((!$tabella) || (!$campi))
    {
      header("Location:http://localhost/creatabella.htm");
     exit;
    }
 $modulo = "
                     <form method=\"post\" action=\"creatabella.php\">
                    <input type=\"hidden\" name=\"tabella\" value=\"$tabella\">
                    <table><tr><td><b>Nome Campo</td><td><b>Tipo campo</td><td><b>Lunghezza</td></tr>
                    ";
   for ($i=0; $i<$campi; $i++)
    {
     $modulo .= "
                           <tr><td align=\"center\"><input type=\"text\" name=\"campo[]\" size=\"25\"></td>
                          <td align=\"center\">
                          <select name=\"tipo[]\">
                         <option value=\"char\">char</option>
                         <option value=\"date\">date</option>
                        <option value=\"float\">float</option>
                        <option value=\"int\">int</option>
                        <option value=\"text\">text</option>
                       <option value=\"varchar\">varchar</option>
                        </select></td>
                     <td align=\"center\"><input type=\"text\" name=\"lunghezza[]\" size=\"5\"></td></tr>
                      ";
     }
 $modulo .= "
                     <tr><td align=\"center\"><input type=\"submit\" value=\"Crea la tabella\"></td></tr>
                    </table></form>
                      ";
?>
<html><head><title>Creazione di una tabella. Fase 2</title></head>
<body>
   <h1>Definizione dei campi della tabella <? echo "$tabella"; ?></h1>
   <? echo "$modulo"; ?>
</body>
</html>

Terminata la seconda fase dobbiamo, come già detto in precedenza, creare l'interrogazione SQL per la creazione della tabella:

Apriamo come sempre il nostro Blocco Note, digitiamo il seguente codice e salviamolo con il nome di creatabella.php:

<?
   $nome = "test1";
   $connessione = mysql_connect("localhost", "nomeutente", "password")
                                   or die("Impossibile stabilire una connessione.");
   $db = mysql_select_db($nome, $connessione)
              or die("Impossibile selezionare il database.");

  $sql = "CREATE TABLE $tabella (";

  for ($i=0; $i<count($campo); $i++)
   {
     $sql .= "$campo[$i] $tipo[$i]";
        if ($lunghezza[$i] != "") { $sql .= " ($lunghezza[$i]),"; }
         else { $sql .= ","; }
   }
  $sql = substr($sql, 0, -1);
  $sql .= ")";

  $ris = mysql_query($sql,$connessione)
            or die("Impossibile eseguire l'interrogazione al database.");

    if ($ris)
      { $msg = "<p><h2>La tabella $tabella è stata creata.</h2>"; }
?>
<html><head><title>Creazione di una tabella nel database: Fase 3</title></head>
<body>
<p><h1>Creazione di una tabella nel database <? echo "$nome"; ?></h1>
<? echo "$msg"; ?>
</body>
</html>